/*Copyright (C) 2009 Careil Baptiste

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
////////////////////////////////////////////////////////////
/// \file Init.h Ce fichier contient les fonctions nécessaires à
/// l'initialisation de la CSLP pour l'affichage.
/// Les sockets et les thread ne nécessite pas l'initialisation de la CSLP.
////////////////////////////////////////////////////////////

#ifndef CSLP_INIT_HEADER
# define CSLP_INIT_HEADER
# include <curses.h>
# include "dll.h"

////////////////////////////////////////////////////////////
/// CSLP_INIT_DEFAULT:
/// Valeurs par défaut lors de l'initialisation: \n
/// -Les touches saisient sont directement affichées.\n
/// -Il y a bufferisation lors de la saisie.\n
/// -Les contrôles tel que CTRL+C et CTRL+Z emmettent un signal.\n
/// -Les touches directionnelles ainsi que les F1, F2,... sont composées.\n
///
/// CSLP_INIT_NO_ECHO:\n
/// Désactive l'affichage du caractères saisie.\n
///
/// CSLP_INIT_RAW: \n
/// Désactive le tampon de saisie. Une touche est envoyée au programme
/// dès sa saisie (il n'y a pas à attendre de '\\n'). Les touches de 
/// contrôles n'emmettent pas de signal et sont passée au programme.\n
///
/// CSLP_INIT_CBREAK: \n
/// Les touches de contrôles n'emmettent pas de signal et sont passée au
/// programme.\n
///
/// CSLP_INIT_KEYPAD: \n
/// Les touches telle que F1, F2 et les touches directionnelles sont
/// facilement utilisables.
///
/// CSLP_INIT_COLORS:\n
/// Permet l'utilisation des couleurs.
///
/// CSLP_INIT_CUSTOM:\n
/// Cette define permet d'initialisé les composant les plus
/// réguliérement utilisés.
////////////////////////////////////////////////////////////
# define CSLP_INIT_DEFAULT	0
# define CSLP_INIT_NO_ECHO	1
# define CSLP_INIT_RAW		2
# define CSLP_INIT_CBREAK     	4
# define CSLP_INIT_KEYPAD	8
# define CSLP_INIT_COLORS	16
# define CSLP_INIT_CUSTOM       CSLP_INIT_NO_ECHO | CSLP_INIT_RAW | CSLP_INIT_KEYPAD | CSLP_INIT_COLORS

////////////////////////////////////////////////////////////
/// Cette fonction permet d'initialiser la console pour utiliser des
/// fonctions avancées modifiant l'affichage.
///
/// \param flags Une ou plusiseurs défitions données plus haut (DEFAULT,
/// NO_ECHO, RAW, CBREAK et KEYPAD).
/// \param delay le temps en secondes au bout duquel une saisie avorte (0 pour
/// désactiver).
/// \return 0 en cas de succès.
////////////////////////////////////////////////////////////
int DLL_IMPEXP  CSLP_InitCurses(int flags, int delay);

////////////////////////////////////////////////////////////
/// Cette fonction initialise les principaux couples de couleur.
/// Elle ne fonctionne que si curses a été initialisé avec les
/// couleurs et que 64 couples ou plus sont supportés.
///
/// \return 0 En cas de succès.
/// \return -2 Si moins de 64 couples de couleurs sont disponibles
/// \return -1 Si le terminal ne possède pas les couleurs ou que
/// curses n'a pas été initialisé avec les couleurs.
////////////////////////////////////////////////////////////
int DLL_IMPEXP CSLP_InitMainColorPairs();

#endif /* !CSLP_INIT_HEADER */
